<?php
/**
 * 请求处理类
 */

namespace Hi;

class Request {

    /**
     * Request实例
     * @var
     */
    protected static $_instance;

    /**
     * 基础地质
     * @var null
     */
    protected $_baseUrl = null;

    /**
     * 控制器
     * @var
     */
    public $_controller;

    /**
     * 动作
     * @var
     */
    public $_action;

    /**
     * QUERY_SRING转化的数组
     * @var
     */
    protected $_queryStringArray;

    /**
     * 请求参数数组
     * @var array
     */
    protected $_requestParams = array();

    /**
     * 存放请求的header信息数组
     * @var array
     */
    protected $_headers = array();
    /**
     * 获取实例
     * @return Request
     */
    public static function getInstance() {
        if (self::$_instance === NULL) {
            self::$_instance = new self();
        }
        return self::$_instance;
    }

    /**
     * 从$_SERVER['PHP_SELF']中提取基础地质
     * @return null|string
     */
    public function setBaseUrl() {
        if ($this->_baseUrl === null) {
            $urlArray = explode('/',$_SERVER['PHP_SELF']);
            unset($urlArray[count($urlArray) - 1]);
            $this->_baseUrl = implode('/',$urlArray);
        }
        return $this->_baseUrl;
    }

    /**
     * 获取基础地址
     * @return null
     */
    public function getBaseUrl() {
        if ($this->_baseUrl === null) {
            $this->_baseUrl = $this->setBaseUrl();
        }
        return $this->_baseUrl;
    }

    public function parseRequestParams($routeType) {
        $requestParams = array();

        if ($routeType == 'cli') {

        } elseif ($routeType == 'rewrite') {


        } elseif ($routeType == 'get') {
            if (!empty($_SERVER['QUERY_STRING'])) {
                $requestParams = $this->getQueryStringArray();
            }
        }
        return $requestParams;
    }

    /**
     * 获取QUERY_STRING数组
     * @return array
     */
    public function getQueryStringArray() {
        if (isset($this->_queryStringArray)) {
            return $this->_queryStringArray;
        }
        $queryStringArray = array();
        parse_str($_SERVER['QUERY_STRING'],$queryStringArray);
        $this->_queryStringArray = $queryStringArray;

        return $queryStringArray;
    }

    /**
     * 设置控制器
     * @param $value
     */
    public function setControllerName($value) {
        $this->_controller = $value;
    }

    /**
     * 设置动作
     * @param $value
     */
    public function setActionName($value) {
        $this->_action = $value;
    }
}